package admin

import (

	// "fish-scaner/adl/ws"
	// adlWs "fish-scaner/adl/ws"

	"gitee.com/AlmondLee/gf-tools/tst"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/util/gconv"
	"golang.org/x/crypto/bcrypt"
)

type Controller struct{}

type stringJson map[string]interface{}

type registerRes struct {
	ErrCode    int		   `json:"err_code"`
	ErrMessage interface{} `json:"err_message"`
	Data	   interface{} `json:"data"`
}

func init() {
}

func returnStdErr(errCode int, errMessage string) *registerRes {
	return &registerRes{
		ErrCode:	1,
		ErrMessage: map[string]string{`std_err`: errMessage},
	}
	// r.Response.Write(os.Args[1])
}

func Auth(r *ghttp.Request) {
	// r.Response.ParseTpl = 200
	r.Response.WriteExit(`1`)
}

func Passwd(r *ghttp.Request) {

	// user := gconv.String(r.Get(`user`, `emm`))
	// pass := gconv.Bytes(r.Get(`pass`, ``))
	// req, err := r.GetJson()
	// if err != nil {
	// panic(err)
	// }
	// js.GetBytes()
	// tst.Pl(req, err)
	// tst.Pl(r.GetMap())
	// tst.Pl(r.Get())

	// user := req.GetString(`user`)
	// pass := req.GetBytes(`pass`)
	user := gconv.String(r.GetForm(`user`, `emm`))
	pass := gconv.String(r.GetForm(`pass`, ``))
	// fmt.Println(r.GetBodyString())
	// tst.Pl(string(pass))
	if user == `admin` {
		g.Redis().Do(`SET`, `admin`, pass)
		// return
	} else {
		// g.Redis().Do(`GET`, `users`)
		// users, err := g.Redis().Do("GET", r.Get(`users`))
		users, err := g.Redis().DoVar("GET", `users`)
		// tst.Pl(r.Get(`users`))
		if err != nil {
			r.Response.WriteExit(err)
			panic(err)
		}
		// if err != nil {
		// panic(err)
		// }
		// usersMap := make(g.Map)
		usersMap := users.Map()
		tst.Pl(usersMap)

		// hash, err := PasswordHash(pass)
		// if err != nil {
		// panic(err)
		// }
		// tst.Pl(user, string(hash), string(pass))
		// usersMap[user] = hash
		usersMap[user] = pass
		g.Redis().Do(`SET`, `users`, usersMap)

	}
	r.Response.WriteExit(`设置成功`)
}

func (c *Controller) Panic(r *ghttp.Request) {
	// panic(2)
}

func (c *Controller) Index(r *ghttp.Request) {
	// .Do("SET", key, user)
	// r.
	// rw:=ViewFunc(r)
	// basicAuth(r.Response.Writer, r, gconv.String(r.Get(`user`)), gconv.String(r.Get(`passwd`)))
	// ghttp.ResponseWriter
	// gredis.Redis
	// r.Response.Write(os.Args[1])
	// r.Response.ClearBuffer

}

func PasswordHash(passwd []byte) ([]byte, error) {
	bytes, err := bcrypt.GenerateFromPassword(passwd, 12)
	return bytes, err
}

func PasswordVerify(passwd, hash []byte) bool {
	err := bcrypt.CompareHashAndPassword(hash, passwd)
	return err == nil
}
